CSS μ΅μ»€ ν¬μ§μ λμ νꡬνκ³ μΆ©λμ νΌνκΈ° μν μ€λ§νΈν μμΉ μ‘°μ ꡬν λ°©λ²μ λ°°μ λ°μν λ° μ¬μ©μ μΉνμ μΈ μΈν°νμ΄μ€λ₯Ό λ§λμΈμ.
CSS μ΅μ»€ ν¬μ§μ λ μΆ©λ ννΌ: μ€λ§νΈν μμΉ μ‘°μ
CSSμ μ΅μ»€ ν¬μ§μ λμ ν μμ(μ΅μ»€λ μμ)μ μμΉλ₯Ό λ€λ₯Έ μμ(μ΅μ»€ μμ)μ μ°κ΄μν€λ κ°λ ₯ν λ°©λ²μ μ 곡ν©λλ€. μ΄ κΈ°λ₯μ λμ μ΄κ³ μν© μΈμμ μΈ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λλ ν₯λ―Έλ‘μ΄ κ°λ₯μ±μ μ΄μ΄μ£Όμ§λ§, λμμ μΆ©λ ννΌλΌλ κ³Όμ λ μ κΈ°ν©λλ€. μ΅μ»€λ μμκ° λ€λ₯Έ μ½ν μΈ μ κ²ΉμΉκ±°λ μΆ©λνλ©΄ μ¬μ©μ κ²½νμ λΆμ μ μΈ μν₯μ λ―ΈμΉ μ μμ΅λλ€. μ΄ κΈμμλ μ΄λ¬ν μΆ©λμ μ°μνκ² μ²λ¦¬νμ¬ μΈλ ¨λκ³ μ κ·Όμ± λμ λμμΈμ 보μ₯νκΈ° μν μ€λ§νΈν μμΉ μ‘°μ ꡬν κΈ°μ μ νꡬν©λλ€.
CSS μ΅μ»€ ν¬μ§μ λ μ΄ν΄νκΈ°
μΆ©λ ννΌμ λν΄ μμ보기 μ μ, μ΅μ»€ ν¬μ§μ λμ κΈ°λ³Έμ λ€μ μ΄ν΄λ³΄κ² μ΅λλ€. μ΄ κΈ°λ₯μ μ£Όλ‘ `anchor()` ν¨μ λ° κ΄λ ¨ CSS μμ±μ ν΅ν΄ μ μ΄λ©λλ€.
기본 ꡬ문
`anchor()` ν¨μλ₯Ό μ¬μ©νλ©΄ μ΅μ»€ μμλ₯Ό μ°Έμ‘°νκ³ λλΉ, λμ΄, μμΉμ κ°μ κ³μ°λ κ°μ κ°μ Έμ¬ μ μμ΅λλ€. κ·Έλ° λ€μ μ΄ κ°μ μ¬μ©νμ¬ μ΅μ»€λ μμμ μμΉλ₯Ό μ§μ ν μ μμ΅λλ€.
μμ:
.anchored-element {
position: absolute;
left: anchor(--anchor-element, right);
top: anchor(--anchor-element, bottom);
}
μ΄ μμμμ `.anchored-element`λ μΌμͺ½ κ°μ₯μλ¦¬κ° `--anchor-element` λ³μμ ν λΉλ μμμ μ€λ₯Έμͺ½ κ°μ₯μ리μ μ λ ¬λκ³ , μμͺ½ κ°μ₯μλ¦¬κ° μ΅μ»€μ μλμͺ½ κ°μ₯μ리μ μ λ ¬λλλ‘ μμΉκ° μ§μ λ©λλ€.
μ΅μ»€ μμ μ€μ νκΈ°
`--anchor-element` λ³μλ μ΅μ»€ μμμ `anchor-name` μμ±μ μ¬μ©νμ¬ μ€μ ν μ μμ΅λλ€:
.anchor-element {
anchor-name: --anchor-element;
}
μΆ©λ λ¬Έμ
μ΅μ»€ ν¬μ§μ λμ λ΄μ¬λ μ μ°μ±μ λν κ³Όμ λ₯Ό μ κΈ°ν©λλ€. μ΅μ»€λ μμκ° μ΅μ»€ κ·Όμ²μ μ¬μ© κ°λ₯ν 곡κ°λ³΄λ€ ν¬λ©΄ μ£Όλ³ μ½ν μΈ μ κ²Ήμ³ μκ°μ μΌλ‘ μ§μ λΆν΄μ§ μ μμ΅λλ€. λ°λ‘ μ΄ μ§μ μμ μΆ©λ ννΌ μ λ΅μ΄ μ€μν΄μ§λλ€.
λ²νΌ μμ λνλλ ν΄νμ μκ°ν΄ 보μΈμ. λ²νΌμ΄ νλ©΄ κ°μ₯μ리 κ·Όμ²μ μμΌλ©΄ ν΄νμ΄ μ리거λ λ€λ₯Έ UI μμμ κ²ΉμΉ μ μμ΅λλ€. μ μ€κ³λ μ루μ μ μ΄λ₯Ό κ°μ§νκ³ ν΄νμ΄ μμ ν 보μ΄κ³ μ€μν μ 보λ₯Ό κ°λ¦¬μ§ μλλ‘ μμΉλ₯Ό μ‘°μ ν΄μΌ ν©λλ€.
μ€λ§νΈν μμΉ μ‘°μ κΈ°μ
CSSμμ μ€λ§νΈν μμΉ μ‘°μ μ ꡬννκΈ° μν΄ μ¬λ¬ κΈ°μ μ μ¬μ©ν μ μμ΅λλ€. κ°μ₯ ν¨κ³Όμ μΈ λͺ κ°μ§ λ°©λ²μ μ΄ν΄λ³΄κ² μ΅λλ€:
1. `calc()` λ° `min`/`max` ν¨μ μ¬μ©νκΈ°
κ°μ₯ κ°λ¨ν μ κ·Ό λ°©μ μ€ νλλ `calc()`λ₯Ό `min()` λ° `max()` ν¨μμ ν¨κ» μ¬μ©νμ¬ μ΅μ»€λ μμμ μμΉλ₯Ό νΉμ κ²½κ³ λ΄λ‘ μ ννλ κ²μ λλ€.
μμ:
.anchored-element {
position: absolute;
left: min(calc(anchor(--anchor-element, right) + 10px), calc(100% - width - 10px));
top: anchor(--anchor-element, bottom);
}
μ΄ κ²½μ° `left` μμ±μ λ κ° μ€ μ΅μκ°μΌλ‘ κ³μ°λ©λλ€: μ΅μ»€μ μ€λ₯Έμͺ½ μμΉμ 10ν½μ μ λν κ°κ³Ό, 컨ν μ΄λ λλΉμ 100%μμ μμμ λλΉμ 10ν½μ μ λΊ κ°μ λλ€. μ΄λ κ² νλ©΄ μ΅μ»€λ μμκ° μ»¨ν μ΄λμ μ€λ₯Έμͺ½ κ°μ₯μ리λ₯Ό μ λ λμ΄κ°μ§ μλλ‘ λ³΄μ₯ν©λλ€.
μ΄ κΈ°μ μ κ°λ¨ν μλ리μ€μ μ μ©νμ§λ§ νκ³κ° μμ΅λλ€. λ€λ₯Έ μμμμ μΆ©λμ μ²λ¦¬νμ§ μκ³ κ²½κ³ μ€λ²νλ‘μ°λ§ μ²λ¦¬ν©λλ€. λν λ μ΄μμμ΄ λ³΅μ‘νλ©΄ κ΄λ¦¬νκΈ° λ²κ±°λ‘μΈ μ μμ΅λλ€.
2. CSS λ³μ λ° `env()` ν¨μ νμ©νκΈ°
λ λ°μ λ μ κ·Ό λ°©μμ CSS λ³μμ `env()` ν¨μλ₯Ό μ¬μ©νμ¬ λ·°ν¬νΈ ν¬κΈ°λ κΈ°ν νκ²½ μμΈμ λ°λΌ λμ μΌλ‘ μμΉλ₯Ό μ‘°μ νλ κ²μ λλ€. μ΄λ₯Ό μν΄μλ μ μ¬μ μΈ μΆ©λμ κ°μ§νκ³ κ·Έμ λ°λΌ CSS λ³μλ₯Ό μ λ°μ΄νΈνλ JavaScriptκ° νμν©λλ€.
μμ(κ°λ ):
/* CSS */
.anchored-element {
position: absolute;
left: var(--adjusted-left, anchor(--anchor-element, right));
top: anchor(--anchor-element, bottom);
}
/* JavaScript */
function adjustPosition() {
const anchorElement = document.querySelector('.anchor-element');
const anchoredElement = document.querySelector('.anchored-element');
if (!anchorElement || !anchoredElement) return;
const anchorRect = anchorElement.getBoundingClientRect();
const anchoredRect = anchoredElement.getBoundingClientRect();
const viewportWidth = window.innerWidth;
let adjustedLeft = anchorRect.right + 10;
if (adjustedLeft + anchoredRect.width > viewportWidth) {
adjustedLeft = anchorRect.left - anchoredRect.width - 10;
}
anchoredElement.style.setProperty('--adjusted-left', adjustedLeft + 'px');
}
window.addEventListener('resize', adjustPosition);
window.addEventListener('load', adjustPosition);
μ΄ μμμμ JavaScriptλ μ΅μ»€λ μμκ° μ΅μ»€μ μ€λ₯Έμͺ½μ μμΉν κ²½μ° λ·°ν¬νΈλ₯Ό λ²μ΄λλμ§ κ°μ§ν©λλ€. λ§μ½ κ·Έλ λ€λ©΄, `adjustedLeft` κ°μ μ¬κ³μ°νμ¬ μ΅μ»€μ μΌμͺ½μ μμΉμν΅λλ€. κ·Έλ° λ€μ `--adjusted-left` CSS λ³μκ° μ λ°μ΄νΈλμ΄ κΈ°λ³Έ `anchor()` ν¨μ κ°μ μ¬μ μν©λλ€.
μ΄ κΈ°μ μ 볡μ‘ν μΆ©λ μλ리μ€λ₯Ό μ²λ¦¬νλ λ° λ ν° μ μ°μ±μ μ 곡ν©λλ€. κ·Έλ¬λ JavaScript μμ‘΄μ±μ λμ νλ©° μ±λ₯μ λ―ΈμΉλ μν₯μ μ μ€νκ² κ³ λ €ν΄μΌ ν©λλ€.
3. μΆ©λ κ°μ§ μκ³ λ¦¬μ¦ κ΅¬ννκΈ°
κ°μ₯ μ κ΅ν μ μ΄λ₯Ό μν΄μλ JavaScriptλ‘ μ¬μ©μ μ μ μΆ©λ κ°μ§ μκ³ λ¦¬μ¦μ ꡬνν μ μμ΅λλ€. μ¬κΈ°μλ μ μ¬μ μΈ μ₯μ λ¬Όμ μννλ©° μ΅μ»€λ μμμμ κ²ΉμΉ¨ μ λλ₯Ό κ³μ°νλ κ³Όμ μ΄ ν¬ν¨λ©λλ€. μ΄ μ 보λ₯Ό λ°νμΌλ‘ μΆ©λμ νΌνκΈ° μν΄ μ΅μ»€λ μμμ μμΉ, λ°©ν₯ λλ μ½ν μΈ κΉμ§ μ‘°μ ν μ μμ΅λλ€.
μ΄ μ κ·Ό λ°©μμ μ΅μ»€λ μμκ° λ³΅μ‘ν λ μ΄μμκ³Ό λμ μΌλ‘ μνΈ μμ©ν΄μΌ νλ μλ리μ€μ νΉν μ μ©ν©λλ€. μλ₯Ό λ€μ΄, μν©μ λ§λ λ©λ΄λ λ€λ₯Έ λ©λ΄λ μ€μν UI μμμ κ²ΉμΉμ§ μλλ‘ μ€μ€λ‘ μμΉλ₯Ό μ¬μ‘°μ ν΄μΌ ν μ μμ΅λλ€.
μμ(κ°λ ):
/* JavaScript */
function avoidCollisions() {
const anchorElement = document.querySelector('.anchor-element');
const anchoredElement = document.querySelector('.anchored-element');
const obstacles = document.querySelectorAll('.obstacle');
if (!anchorElement || !anchoredElement) return;
const anchorRect = anchorElement.getBoundingClientRect();
const anchoredRect = anchoredElement.getBoundingClientRect();
let bestPosition = { left: anchorRect.right + 10, top: anchorRect.bottom };
let minOverlap = Infinity;
// Check for collisions in different positions (right, left, top, bottom)
const potentialPositions = [
{ left: anchorRect.right + 10, top: anchorRect.bottom }, // Right
{ left: anchorRect.left - anchoredRect.width - 10, top: anchorRect.bottom }, // Left
{ left: anchorRect.right, top: anchorRect.top - anchoredRect.height - 10 }, // Top
{ left: anchorRect.right, top: anchorRect.bottom + 10 } // Bottom
];
potentialPositions.forEach(position => {
let totalOverlap = 0;
obstacles.forEach(obstacle => {
const obstacleRect = obstacle.getBoundingClientRect();
const proposedRect = {
left: position.left,
top: position.top,
width: anchoredRect.width,
height: anchoredRect.height
};
const overlapArea = calculateOverlapArea(proposedRect, obstacleRect);
totalOverlap += overlapArea;
});
if (totalOverlap < minOverlap) {
minOverlap = totalOverlap;
bestPosition = position;
}
});
anchoredElement.style.left = bestPosition.left + 'px';
anchoredElement.style.top = bestPosition.top + 'px';
}
function calculateOverlapArea(rect1, rect2) {
const left = Math.max(rect1.left, rect2.left);
const top = Math.max(rect1.top, rect2.top);
const right = Math.min(rect1.left + rect1.width, rect2.left + rect2.width);
const bottom = Math.min(rect1.top + rect1.height, rect2.top + rect2.height);
const width = Math.max(0, right - left);
const height = Math.max(0, bottom - top);
return width * height;
}
window.addEventListener('resize', avoidCollisions);
window.addEventListener('load', avoidCollisions);
μ΄ κ°λ μ μμλ μ μ¬μ μΈ μμΉ(μ€λ₯Έμͺ½, μΌμͺ½, μ, μλ)λ₯Ό μννλ©° κ° μ₯μ λ¬Όκ³Όμ κ²ΉμΉ¨ μμμ κ³μ°ν©λλ€. κ·Έλ° λ€μ κ²ΉμΉ¨μ΄ κ°μ₯ μ μ μμΉλ₯Ό μ νν©λλ€. μ΄ μκ³ λ¦¬μ¦μ νΉμ μμΉλ₯Ό μ°μ μνκ³ , λ€λ₯Έ μ νμ μ₯μ λ¬Όμ κ³ λ €νλ©°, λ λΆλλ¬μ΄ μ νμ μν΄ μ λλ©μ΄μ μ ν΅ν©νλλ‘ μΆκ°λ‘ κ°μ λ μ μμ΅λλ€.
4. CSS Containment μ¬μ©νκΈ°
CSS Containmentλ₯Ό μ¬μ©νμ¬ μ΅μ»€λ μμλ₯Ό 격리νλ©΄ μ±λ₯κ³Ό μμΈ‘ κ°λ₯μ±μ ν₯μμν¬ μ μμ΅λλ€. μ΅μ»€λ μμμ λΆλͺ¨ μμμ `contain: content` λλ `contain: layout`μ μ μ©νλ©΄ μμΉ λ³κ²½μ΄ νμ΄μ§μ λλ¨Έμ§ λΆλΆμ λ―ΈμΉλ μν₯μ μ νν μ μμ΅λλ€. μ΄λ 볡μ‘ν λ μ΄μμκ³Ό λΉλ²ν μμΉ μ¬μ‘°μ μ μ²λ¦¬ν λ νΉν μ μ©ν μ μμ΅λλ€.
μμ:
.parent-container {
contain: content;
}
.anchored-element {
position: absolute;
/* ... anchor positioning styles ... */
}
μ κ·Όμ± κ³ λ € μ¬ν
μΆ©λ ννΌλ₯Ό ꡬνν λ μ κ·Όμ±μ κ³ λ €νλ κ²μ΄ λ§€μ° μ€μν©λλ€. μ΅μ»€λ μμμ μ‘°μ λ μμΉκ° μ€μν μ 보λ₯Ό κ°λ¦¬κ±°λ μ¬μ©μκ° μΈν°νμ΄μ€μ μνΈ μμ©νκΈ° μ΄λ ΅κ² λ§λ€μ§ μλλ‘ ν΄μΌ ν©λλ€. λ€μμ λͺ κ°μ§ μ£Όμ μ§μΉ¨μ λλ€:
- ν€λ³΄λ νμ: ν€λ³΄λ μ¬μ©μκ° μ‘°μ λ μμΉμμλ μ΅μ»€λ μμμ μ½κ² μ κ·Όνκ³ μνΈ μμ©ν μ μλμ§ νμΈν©λλ€.
- μ€ν¬λ¦° 리λ νΈνμ±: μ€ν¬λ¦° 리λκ° μ‘°μ νμλ μ΅μ»€λ μμμ μμΉμ λ΄μ©μ μ¬λ°λ₯΄κ² μ리λμ§ νμΈν©λλ€.
- μΆ©λΆν λλΉ: κ°λ μ±μ 보μ₯νκΈ° μν΄ μ΅μ»€λ μμμ λ°°κ²½ κ°μ μΆ©λΆν μμ λλΉλ₯Ό μ μ§ν©λλ€.
- μ΄μ κ΄λ¦¬: μ΅μ»€λ μμκ° λνλκ±°λ μμΉλ₯Ό λ³κ²½ν λ μ΄μ μ μ μ νκ² κ΄λ¦¬ν©λλ€. νμν κ²½μ° μμλ‘ μ΄μ μ΄ μ΄λνλλ‘ ν©λλ€.
κ΅μ ν(i18n) κ³ λ € μ¬ν
λ€μν μΈμ΄μ μ°κΈ° λͺ¨λλ μ¬μ©μ μΈν°νμ΄μ€μ λ μ΄μμμ μλΉν μν₯μ λ―ΈμΉ μ μμ΅λλ€. μ΅μ»€ ν¬μ§μ λκ³Ό μΆ©λ ννΌλ₯Ό ꡬνν λλ λ€μ μ¬νμ κ³ λ €νλ κ²μ΄ νμμ μ λλ€:
- μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ°λ(RTL) μΈμ΄: μλμ΄ λ° νλΈλ¦¬μ΄μ κ°μ RTL μΈμ΄μ κ²½μ° μμμ κΈ°λ³Έ μμΉκ° λ°μ λ©λλ€. μΆ©λ ννΌ λ‘μ§μ΄ RTL λ μ΄μμμ μ¬λ°λ₯΄κ² μ²λ¦¬νλμ§ νμΈν΄μΌ ν©λλ€. κ³μ°μμ `left`μ `right` κ°μ λ°κΏμΌ ν μλ μμ΅λλ€.
- ν μ€νΈ νμ₯: μΌλΆ μΈμ΄λ λμΌν μ 보λ₯Ό νμνλ λ° λ λ§μ 곡κ°μ΄ νμν©λλ€. μ΄λ μκΈ°μΉ μμ μΆ©λλ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ΅μ»€λ μμκ° μ¬μ© κ°λ₯ν 곡κ°μ μ¬μ ν λ§λμ§ νμΈνκΈ° μν΄ λ€μν μΈμ΄λ‘ λ μ΄μμμ ν μ€νΈνμΈμ.
- κΈκΌ΄ λ³ν: κΈκΌ΄λ§λ€ λ¬Έμ λλΉμ λμ΄κ° λ€λ¦ λλ€. μ΄λ μμμ ν¬κΈ°μ μΆ©λ κ°λ₯μ±μ μν₯μ λ―ΈμΉ μ μμ΅λλ€. κΈκΌ΄ λ©νΈλ¦μ μ¬μ©νμ¬ μμμ μ νν ν¬κΈ°λ₯Ό κ³μ°νκ³ κ·Έμ λ°λΌ μμΉλ₯Ό μ‘°μ νλ κ²μ κ³ λ €νμΈμ.
κΈλ‘λ² λ§₯λ½μμμ μμ
λ€μν κΈλ‘λ² μλ리μ€μμ μΆ©λ ννΌκ° μ΄λ»κ² μ μ©λ μ μλμ§ λͺ κ°μ§ μλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
- μ μ μκ±°λ μΉμ¬μ΄νΈ(λ€κ΅μ΄): μ¬λ¬ μΈμ΄λ₯Ό μ§μνλ μ μ μκ±°λ μΉμ¬μ΄νΈμμ ν΄νμ μ ν μ€λͺ μ΄λ κ°κ²© μ 보λ₯Ό νμν μ μμ΅λλ€. μ νν μΈμ΄μ κ΄κ³μμ΄ μ΄λ¬ν ν΄νμ΄ μμ ν 보μ΄κ³ μ ν μ΄λ―Έμ§λ λ€λ₯Έ UI μμμ κ²ΉμΉμ§ μλλ‘ νλ €λ©΄ μΆ©λ ννΌκ° λ§€μ° μ€μν©λλ€.
- μ§λ μ ν리μΌμ΄μ : μ§λ μ ν리μΌμ΄μ μ μ¬μ©μκ° νΉμ μμΉλ₯Ό ν΄λ¦νμ λ μ 보 μ°½μ΄λ μ½μμμ νμν μ μμ΅λλ€. μΆ©λ ννΌλ νΉν μΈκ΅¬ λ°μ§ μ§μμμ μ΄λ¬ν μ°½μ΄ λ€λ₯Έ μ§λ κΈ°λ₯μ΄λ λ μ΄λΈμ κ°λ¦¬μ§ μλλ‘ λ³΄μ₯ν©λλ€. μ΄λ μ§λ λ°μ΄ν° κ°μ©μ± μμ€μ΄ λ€μν κ΅κ°μμ νΉν μ€μν©λλ€.
- λ°μ΄ν° μκ°ν λμ보λ: λ°μ΄ν° μκ°ν λμ보λλ μ΅μ»€λ μμλ₯Ό μ¬μ©νμ¬ λ°μ΄ν° ν¬μΈνΈμ λν λ§₯λ½ μ 보λ₯Ό νμν μ μμ΅λλ€. μΆ©λ ννΌλ μ΄λ¬ν μμκ° λ°μ΄ν° μκ°ν μ체μ κ²ΉμΉμ§ μλλ‘ νμ¬ μ¬μ©μκ° λ°μ΄ν°λ₯Ό λ μ½κ² μ ννκ² ν΄μν μ μλλ‘ ν©λλ€. λ°μ΄ν° νμμ λν λ€μν λ¬Ένμ κ΄νμ κ³ λ €ν΄μΌ ν©λλ€.
- μ¨λΌμΈ κ΅μ‘ νλ«νΌ: μ¨λΌμΈ κ΅μ‘ νλ«νΌμ ν΄μ¦λ μ°μ΅ λ¬Έμ μ€μ ννΈλ μ€λͺ μ μ 곡νκΈ° μν΄ μ΅μ»€λ μμλ₯Ό μ¬μ©ν μ μμ΅λλ€. μΆ©λ ννΌλ μ΄λ¬ν μμκ° μ§λ¬Έμ΄λ λ΅λ³ μ΅μ μ κ°λ¦¬μ§ μλλ‘ νμ¬ νμλ€μ΄ νμ΅ μλ£μ μ§μ€ν μ μλλ‘ ν©λλ€. νμ§νλ ννΈμ μ€λͺ μ΄ μ¬λ°λ₯΄κ² νμλλμ§ νμΈν΄μΌ ν©λλ€.
λͺ¨λ² μ¬λ‘ λ° μ΅μ ν
μ΅μ μ μ±λ₯κ³Ό μ μ§ κ΄λ¦¬μ±μ 보μ₯νλ €λ©΄ μ΅μ»€ ν¬μ§μ λ λ° μΆ©λ ννΌλ₯Ό ꡬνν λ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄μμμ€:
- μ΄λ²€νΈ 리μ€λ λλ°μ΄μ±: JavaScriptλ₯Ό μ¬μ©νμ¬ μΆ©λμ κ°μ§ν λ, κ³Όλν κ³μ°μ νΌνκΈ° μν΄ `resize` λ° `scroll`κ³Ό κ°μ μ΄λ²€νΈ 리μ€λλ₯Ό λλ°μ΄μ€ μ²λ¦¬ν©λλ€.
- μμ μμΉ μΊμ±: λΆνμν μ¬κ³μ°μ νΌνκΈ° μν΄ μ΅μ»€ μμμ μ₯μ λ¬Όμ μμΉλ₯Ό μΊμν©λλ€.
- μμΉ μ¬μ‘°μ μ μν΄ CSS Transform μ¬μ©: λ λμ μ±λ₯μ μν΄ `left` λ° `top` μμ±μ μ§μ μμ νλ λμ CSS transform(μ: `translate`)μ μ¬μ©ν©λλ€.
- μΆ©λ κ°μ§ λ‘μ§ μ΅μ ν: νμν κ³μ° μλ₯Ό μ΅μννλλ‘ μΆ©λ κ°μ§ μκ³ λ¦¬μ¦μ μ΅μ νν©λλ€. μ₯μ λ¬Ό μκ° λ§μ κ²½μ° κ³΅κ° μΈλ±μ± κΈ°μ μ¬μ©μ κ³ λ €ν©λλ€.
- μ² μ ν ν μ€νΈ: λ€μν μ₯μΉ, λΈλΌμ°μ λ° νλ©΄ ν¬κΈ°μμ μΆ©λ ννΌ κ΅¬νμ μ² μ ν ν μ€νΈν©λλ€.
- νμ μ ν΄λ¦¬ν μ¬μ©: μ΅μ»€ ν¬μ§μ λμ λ리 μ§μλμ§λ§, νΈνμ±μ 보μ₯νκΈ° μν΄ κ΅¬ν λΈλΌμ°μ μ© ν΄λ¦¬ν μ¬μ©μ κ³ λ €ν©λλ€.
κ²°λ‘
CSS μ΅μ»€ ν¬μ§μ λμ μ€λ§νΈν μΆ©λ ννΌ κΈ°μ κ³Ό κ²°ν©νμ¬ λμ μ΄κ³ λ°μνμΈ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λλ κ°λ ₯ν μ κ·Ό λ°©μμ μ 곡ν©λλ€. μΆ©λ κ°λ₯μ±μ μ μ€νκ² κ³ λ €νκ³ μ μ ν μ‘°μ μ λ΅μ ꡬνν¨μΌλ‘μ¨, λ€μν μ₯μΉμ λ¬Ένμ λ§₯λ½μμ μκ°μ μΌλ‘ λ§€λ ₯μ μ΄λ©΄μλ μ¬μ©μ μΉνμ μΈ λμμΈμ 보μ₯ν μ μμ΅λλ€. λͺ¨λ μ¬μ©μλ₯Ό μν ν¬μ©μ μΈ κ²½νμ λ§λ€κΈ° μν΄ μ κ·Όμ±κ³Ό κ΅μ νλ₯Ό μ°μ μνλ κ²μ μμ§ λ§μμμ€. μΉ κ°λ°μ΄ κ³μ λ°μ ν¨μ λ°λΌ, μ΄λ¬ν κΈ°μ μ μ΅λνλ κ²μ νλμ μ΄κ³ λ§€λ ₯μ μ΄λ©° μ μΈκ³μ μΌλ‘ μ κ·Ό κ°λ₯ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μ μ λ κ°μΉκ° μμ κ²μ λλ€.